/**
 * 这是定义文章操作的类
 * @type {Db}
 */
var mongodb=require('./db');
//定义markdowm格式,对markdown格式的文章进行转换为html格式
var markdown=require('markdown').markdown;
//定义文章的构造函数
function Post(name,title,content) {
    //发表文章的当前用户名
    this.name=name;
    this.title=title;
    this.content=content;
}
//导出文章类
module.exports=Post;
//保存文章
Post.prototype.save=function (callback) {
    var date=new Date();
    var time={
        year:date.getFullYear(),
        month:date.getFullYear()+'-'+((date.getMonth()+1)<10?'0'+(date.getMonth()+1):(date.getMonth()+1)),
        date:date.getFullYear()+'-'+((date.getMonth()+1)<10?'0'+(date.getMonth()+1):(date.getMonth()+1))+'-'+
        (date.getDate()<10?'0'+date.getDate():date.getDate()),
        second:date.getFullYear()+'-'+((date.getMonth()+1)<10?'0'+(date.getMonth()+1):(date.getMonth()+1))+'-'+
        (date.getDate()<10?'0'+date.getDate():date.getDate())+' '+(date.getHours()<10?'0'+date.getHours():date.getHours())+
         ':'+(date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())+':'+(date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds())
    }
    //保存文章是以当前发表文章的用户名、标题、内容、时间4个属性进行保存
    var post={
        name:this.name,
        title:this.title,
        content:this.content,
        //发表文章的时间
        time:time,
        zan:0,
        buzan:0,
        liulan:1
    }
    //打开数据库
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合,不存在会自动创建
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //为name添加索引属性
            collection.ensureIndex('name');
            //保存文章
            collection.insert(post,{safe:true},function (err) {
                mongodb.close();
                if(err){
                    return callback(err);
                }
                //保存成功
                return callback(null);
            })
        });
    })
}
//查询文章,根据用户名查询
Post.get=function (name,page,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                return callback(err);
            }
            //进行查询
            var nameCondition={};
            if(name){
                nameCondition.name=name;
            }
            collection.count(nameCondition,function (err,total) {
                if(err){
                    return callback(err);
                }
                //
                collection.find(nameCondition,{skip:(page-1)*10,limit:10}).sort({'time.second':-1}).toArray(function (err,docs) {
                    if(err){
                        return callback(err);
                    }
                    //将返回的数据转换为html格式,这样markdown格式的文章在页面显示时可以正常显示
                    docs.forEach(function (doc,index) {
                        doc.content=markdown.toHTML(doc.content);
                    })
                    //查询成功，以数组docs方式返回
                    return callback(null,docs,total);
                })
            })
        })
    })
}
//修改查询一篇文章
Post.getOne=function (name,title,second,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //进行集合的操作
            var query={
                name:name,
                title:title,
                'time.second':second
            };
            collection.findOne(query,function (err,doc) {
                mongodb.close();
                if(err){
                    return callback(err);
                }
                //查询成功
                //修改content内容不需要转格式
                return callback(null,doc);
            })
        })
    })
}

//删除一篇文章
Post.delete=function (name,title,second,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //进行删除文章,justOne:true只删除第一个符合条件的文章
            collection.remove({name:name,title:title,'time.second':second},{justOne:true},function (err) {
                mongodb.close();
                if(err){
                    return callback(err);
                }
                //删除成功
                return callback(null);
            })
        })
    })
}


//编辑文章
Post.edit=function (name,title,second,content,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                return callback(err);
            }
            //进行集合的更新操作
            collection.update({name:name,title:title,'time.second':second},
                {$set:{content:content}},function (err) {
                if(err){
                    return callback(err);
                }
                //更新数据成功
                 return callback(null);
            })
        })
    })
}



//点赞一篇文章
Post.getzanOne=function (name,title,second,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //进行集合的操作
            var query={
                name:name,
                title:title,
                'time.second':second
            };
            collection.findOne(query,function (err,doc) {
                if(err){
                    return callback(err);
                }
                //
                if(doc){
                    collection.update(query,{$inc:{zan:1}},function (err) {
                        if(err){
                            return callback(err);
                        }
                        doc.content=markdown.toHTML(doc.content);
                        return callback(null,doc);
                    })
                }
            })
        })
    })
}
//取消赞一篇文章
Post.getbuzanOne=function (name,title,second,callback) {
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取数据库的集合
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //进行集合的操作
            var query={
                name:name,
                title:title,
                'time.second':second
            };
            collection.findOne(query,function (err,doc) {
                if(err){
                    return callback(err);
                }
                //
                if(doc){
                    collection.update(query,{$inc:{buzan:1}},function (err) {
                        if(err){
                            return callback(err);
                        }
                        doc.content=markdown.toHTML(doc.content);
                        return callback(null,doc);
                    })
                }
            })
        })
    })
}
//设置浏览量
Post.liulan=function (name,second,callback) {
    var query={
        name:name,
        'time.second':second
    }
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        db.collection('posts',function (err,collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //先查询，再更新
            collection.findOne(query,function (err,text) {
                if(err){
                    return callback(err);
                }
                if(text){
                    //进行浏览量的更新操作
                    collection.update(query,{$inc:{liulan:1}},function (err) {
                        if(err){
                            return callback(err);
                        }
                        //更新成功
                        text.content=markdown.toHTML(text.content);
                        return callback(null,text);
                    })
                }
            })
        })
    })
}